如何在高速计数器断电或停机后实现数据保持?
方法1:使用CTRL_HSC指令
高速计数器断电或停机后再次运行时,高速计数器会被初始化,高速计数器的值会复位为初始值。为了实现数据保持,可按照下面步骤编程实现。
1 |
在 Device configuration>HSC_1>Properties>General 中,使能高速计数器。 图. 01 |
2 |
在 Device configuration>HSC_1>Properties>Function中, 定义 Type of counting 为 Counting。 图. 02 |
3 |
在 Device configuration>HSC_1>Properties>IO addresses/HW identifier 中,使用缺省地址 1000 作为高速计数器地址。 图. 03 |
4 |
添加一个新的 DB 命名为 DB HSC retain,并且创建一个 Dint 数据元素,命名为 H SC_1 用于保存高速计数器的值。为了实现这个功能, HSC_1 通过勾选Retain 项实现数据保持。 图. 04 |
5 |
插入 Cyclic interrupt (循环中断)OB201,设置中断时间为 10 ms (也可以根据需要改变这个时间)。然后在 OB201 中将高速计数器的值 ID1000:P 送到 "DB HSC retain".HSC_1 中。这样,高速计数器的值每10ms 送到 DB 中保存。 图. 05 |
6 |
创建启动块 OB100,并且编程将保存的数值 "DB HSC retain".HSC_1 送到 NEW_CV,并且置位 CV 位。使得在CPU 启动时,保存的值被设置成当前值。 图. 06 |
7 |
在 OB1 中编程 CTRL_HSC ,再将保存的值设为当前值后,复位 CV 位。 图. 07 |
方法2:使用CTRL_HSC_EXT指令
1 |
在OB1中,将高速计数器的值 ID1000存入保持DB中,调用CTRL_HSC _EXT指令,在将保存的值设为当前值后,复位 ENCV 位。 图. 08 |
2 |
在OB100中将该保存值赋给NewCurrentCount,并且置位 ENCV 和ENHSC,使得在CPU 启动时,保存的值被设置成当前值。 图. 09 |
高速计数器的计数范围是什么?
答:高速计数器的计数范围是 —— 。 当向上计数到最大值时,会跳回到 ;当向下计数到最小值时,会跳回 。
断电停机或复位后,高速计数器的值会复位到什么值?
答: CPU 断电或重启后,高速计数器的值会复位到初始 值;如果执行了外部复位, 高速计数器的值会复位为0。
不编写 CTRL_HSC , 高速计数器是否可以计数?
答: 只要在硬件配置里使能并组态了高速计数器,不编写 CTRL_HSC , 高速计数器就可以正常计数。CTRL_HSC 只是完成参数写入的功能。
为什么高速计数器的数值不增加,总是停在一个固定的值?
答: 如果编程了 CTRL_HSC ,当置位 CV 将 NEW_CV 写入当前值后, CV位不会自动复位为0,这时程序会一直将 NEW_CV写入当前值,导致高速计数器不继续计数而保持在固定的 NEW_CV 值。因此必须编程复位 CV,才能避免该错误的发生。
如果高速计数器定义为 “运动轴” 计数,程序中是否还可以访问 ID1000 :P 的值?
答: 如果高速计数器用做内部的运动控制的计数,此时程序中不能再访问 ID1000 :P 的值,否则会造成 I/O 访问错误。如果没有编程GET_ERROR 或 GET_ERR_ID 指令,还会造成 CPU 停机。
为什么 CTRL_HSC 的 “STATUS” 会返回 “ 80C0 ” 多次访问高速计数器错误?
答: 如果高速计数器用做内部的运动控制的计数,则CTRL_HSC 的 “STATUS” 就会返回 “ 80C0 ” 多次访问高速计数器错误。
使用信号板 SB1221 4DI (V3.0及早期版本) 最多可以接入多少组高速计数器 ?
答: 最多2组,所使用的高速计数器号可以是 HSC1、HSC2、HSC5、HSC6其中2组。
为什么S7-1200 高速计数器只能检测到低频率的脉冲信号?
答: 在 S7-1200 CPU 和 SB 信号板的属性中,数字量输入通道的输入滤波器默认设置值为 6.4 millisec, 该输入滤波时间对应的高速计数器能检测到的最大频率为 78HZ。
因此如果使用该默认值,且 S7-1200 CPU 或 SB 信号板接入的高速输入脉冲超过 78HZ,则 S7-1200 CPU 或SB 信号板过滤掉该频率的输入脉冲。
要正确使用 S7-1200 CPU 和 SB 信号板高速计数功能,需要根据实际接入的高速输入脉冲最大频率,在“属性—常规—数字量输入通道设置"输入滤波器时间。
V4.0 或更高版本的 S7-1200 CPU 和 SB 信号板,每个数字量输入点都可设置输入滤波器时间, 如下图 8 和 9 所示:
图 8. 设置 S7-1200 CPU 输入滤波器时间
图 9. 设置 SB 信号板输入滤波器时间
下表 1 显示了输入滤波器时间和可检测到的最大输入频率:
输入滤波器时间 | 可检测到的最大输入频率 |
0.1 microsec | 1 MHZ |
0.2 microsec | 1 MHZ |
0.4 microsec | 1 MHZ |
0.8 microsec | 625 KHZ |
1.6 microsec | 312 KHZ |
3.2 microsec | 156 KHZ |
6.4 microsec | 78 KHZ |
10 microsec | 50 KHZ |
12.8 microsec | 39 KHZ |
20 microsec | 25 KHZ |
0.05 millisec | 10 KHZ |
0.1 millisec | 5 KHZ |
0.2 millisec | 2.5 KHZ |
0.4 millisec | 1.25 KHZ |
0.8 millisec | 625 HZ |
1.6 millisec | 312 HZ |
3.2 millisec | 156 HZ |
6.4 millisec | 78 HZ |
10 millisec | 50 HZ |
12.8 millisec | 39 HZ |
20 millisec | 25 HZ |
表 1. 输入滤波器时间和可检测到的最大输入频率
S7-1200 的高速计数器输入通道是否固定?
早期固件版本的高速计数器输入通道是固定的。
V4.0 或更高版本的 S7-1200 的高速计数器输入通道可以在其属性中更改。如图 10 所示:
图 10. 更改高速计数器输入通道
S7-1200 CPU 最多支持多少个高速计数器?
早期固件版本的S7-1200 CPU 中,CPU 1211C 最多支持3个单相的高速计数器,CPU 1212C 最多支持 4 个单相的高速计数器,CPU1214C 和 CPU1215C最 多支持6个单相的高速计数器。
V4.0或更高版本的所有型号的S7-1200 CPU 都支持最多6个单相高速计数器。
需要注意的是V4.0或更高版本的 S7-1200 CPU 有默认的高速计数器通道地址,而 CPU 1211C 数字量输入地址仅有 6 个,为I0.0-I0.5,CPU 1212C 数字量输入地址仅有8个,为I0.0-I0.7。
因此如果需要使用 CPU 1211C 的 HSC4, HSC5, HSC6 或 CPU 1212C 的 HSC5, HSC6 ,则需要更改其硬件输入地址到有效的范围才能正常使用。以 CPU1211C 举例,如图 11,12,13 所示:
图 11. 更改 HSC4 的硬件输入地址
图 12. 更改 HSC5 的硬件输入地址
图 13. 更改 HSC6 的硬件输入地址